package cn.alone.exam.mi;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * Created by RojerAlone on 2017-09-18.
 * 路径问题
 * 假如有一个HTTP Server，可以对不同的路径（Path）注册不同的处理函数（Handler）。路径的格式为/x/y/z，使用“/”作为分隔符，
 * 被分隔开的每个组件都是只包含字母的非空字符串；路径总是以“/”开头，且不以“/”结尾，也不会出现“/x//y”这样的情况。
 * 为了简化问题，我们将处理函数用整数的ID号表示。 对于客户端的HTTP请求，我们需要根据路径匹配最合适的处理函数。
 * 匹配规则是：在所有已经注册的路径中，找到包含该路径的最长前缀。前缀要求对组件的匹配是完整的，
 * 因此“/a/b”是“/a/b/c”的前缀，但不是“/a/bc”的前缀。
 *
 * 输入分两部分：
 * 第一部分是注册的路径列表，每行两个元素，用空格分开，分别为路径和ID号；ID号为非0整数，且不会重复。
 * 第二部分是需要匹配的路径列表，每行一个路径。
 * 两个部分用只包含一个短横线的特殊行分隔。
 * 对于每个需要匹配的路径，输出其匹配的ID号，每行一个；如果没有找到匹配路径，则输出0。
 *
 /a 1
 /a/b 2
 /a/b/c/d/e/f/g/h/i 3
 /a/bcde 4
 -
 /a
 /a/b
 /a/b/c/d
 /a/b/c/d/e/f/g/h/i
 /a/bcde
 /a/bcdefghi
 /b

 1
 2
 2
 3
 4
 1
 0
 */
public class PathProblem {

    private static Map<String, Integer> map = new HashMap<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean flag = false; // 记录是否开始输入要匹配的路径了
        while (sc.hasNext()) {
            String str = sc.nextLine();
            if (str.equals("-")) {
                flag = true;
            } else if (flag) {
                if (map.get(str) != null) {
                    System.out.println(map.get(str));
                } else {
                    int max = -1;
                    String[] strs = str.split("/");
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < strs.length; i++) {
                        if (strs[i].isEmpty()) {
                            continue;
                        }
                        sb.append("/").append(strs[i]);
                        max = Math.max(max, map.getOrDefault(sb.toString(), -1));
                    }
                    if (max == -1) {
                        System.out.println(0);
                    } else {
                        System.out.println(max);
                    }
                }
            } else {
                String[] strs = str.split(" ");
                map.put(strs[0], Integer.valueOf(strs[1]));
            }
        }
    }

}
